/*
 * Copyright (c)  2016, dabing.io
 * All rights reserved.
 * Activity.java 2017-09-16 上午10:51
 */

package com.ueboot.weishop.entity.activity;

import com.ueboot.weishop.entity.IDEntity;
import com.ueboot.weishop.entity.goods.GoodsInfoEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Date;

/**
 * 描述:活动
 * 所有活动都在一张表中维护。针对满减、满赠、加价购活动有另外一个表进行多余的字段维护。
 * 如果是非通用属性，则放在ActivityAttrEntity属性当中。
 *
 *
 * @author yangkui create on 2017-09-16.
 * @since 1.0
 */
@Data
@NoArgsConstructor
@Entity(name = "WS_ACTIVITY")
public class ActivityEntity extends IDEntity {
    /**
     * 活动类型-秒杀
     */
    public static final String TYPE_SEC_KILL="秒杀";
    /**
     * 活动类型-众筹
     */
    public static final String TYPE_CROW="众筹";

    /**
     * 活动类型-秒杀
     */
    public static final String TYPE_DISCOUNT="限时折扣";


    /**
     * 活动类型-代金券
     */
    public static final String TYPE_COUPON="代金券";

    /**
     * 限购判断方式：不限购
     */
    public static final String LIMIT_TYPE_NONE="NONE";
    /**
     * 限购判断方式：OPENID
     */
    public static final String LIMIT_TYPE_OPENID="OPENID";
    /**
     * 限购判断方式：VIN
     */
    public static final String LIMIT_TYPE_VIN="VIN";
    /**
     * 限购判断方式：MOBILE
     */
    public static final String LIMIT_TYPE_MOBILE="MOBILE";
    /**
     * 活动状态：开启中
     */
    public static final String STATUS_OPENING="开启中";
    /**
     *  活动状态：暂停中
     */
    public static final String STATUS_PAUSE="暂停中";
    /**
     *  活动状态：已失效（需要手工设置状态为已失效）
     */
    public static final String STATUS_INVALID="已失效";
    /**
     * 库存统计方式：根据活动库存统计
     */
    public static final String STOCK_COUNT_TYPE_ACT="活动";
    public static final String STOCK_COUNT_TYPE_GOODS="商品";
    public static final String STOCK_COUNT_TYPE_SPEC="规格";
    public static final String STOCK_COUNT_TYPE_SPEC_SN="规格代码";




    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "WS_ACTIVITY")
    @GenericGenerator(name = "WS_ACTIVITY", strategy = "enhanced-table", parameters = {
            @org.hibernate.annotations.Parameter(name = "table_name", value = "WS_TABLE_SEQUENCE"),
            @org.hibernate.annotations.Parameter(name = "segment_value", value = "WS_ACTIVITY"),
            @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled")})
    @Column(name = "ID", columnDefinition = "INT(20) COMMENT 'id主键'", length = 20)
    private Long id;

    /**
     * 活动状态：开启中|暂停中|已失效
     *
     */
    @Column(name = "STATUS",columnDefinition = "VARCHAR(40) COMMENT '活动状态：开启中|暂停中|已失效'",length = 40)
    private String status;

    /**
     * 活动归属CODE
     *
     */
    @Column(name = "GROUP_CODE",columnDefinition = "VARCHAR(200) COMMENT '活动归属组代码'",length = 200)
    private String groupCode;

    /**
     * 规则说明（给客户看）
     */
    @Column(name = "RULE_DESC",columnDefinition = "VARCHAR(2000) COMMENT '规则说明（给客户看）'",length = 2000)
    private String ruleDesc;

    /**
     * 活动名称（名称会显示在商品搜索列表当中）
     */
    @Column(name = "NAME",columnDefinition = "VARCHAR(200) COMMENT '活动名称（名称会显示在商品搜索列表当中）'",length = 200)
    private String name;
    /**
     * 活动开始时间,精确到秒
     */
    @Column(name = "START_TIME",columnDefinition = "DATE COMMENT '活动开始时间,精确到秒'")
    private Date startTime;
    /**
     * 活动结束时间，精确到秒
     */
    @Column(name = "END_TIME",columnDefinition = "DATE COMMENT '活动结束时间，精确到秒'")
    private Date endTime;
    /**
     * 描述说明
     */
    @Column(name = "REMARK",columnDefinition = "VARCHAR(2000) COMMENT '描述说明'",length = 2000)
    private String remark;

    /**
     * 活动编号，默认为yyyMMddHHmmss
     */
    @Column(name = "SN",columnDefinition = "VARCHAR(40) COMMENT '活动编号，默认为yyyMMddHHmmss'",length = 40)
    private String sn;
    /**
     * 活动类型：限时折扣|满减|满赠|秒杀|众筹
     */
    @Column(name = "TYPE",columnDefinition = "VARCHAR(40) COMMENT '活动类型：限时折扣|满减|满赠|秒杀|众筹'",length = 40)
    private String type;

    /**
     * 每个人可以购买的份数（只限制到活动级别，未限制商品级别）针对当前活动而言
     *
     */
    @Column(name = "LIMIT_COPIES",columnDefinition = "INT(11) COMMENT '每个人可以秒杀的份数'",length = 11)
    private Integer limitCopies;

    /**
     * 限购的方式，值为NONE时不限购
     * 取值：OPENID|VIN|MOBILE
     *
     */
    @Column(name = "LIMIT_TYPE",columnDefinition = "VARCHAR(8) COMMENT '限购的方式，值为NONE时不限购取值：OPENID|VIN|MOBILE'",length = 11)
    private String limitType;

    /**
     * 库存统计方式，不同的统计方式决定了用户购买是如果计算库存和减去库存，值为空时，默认采用商品ID
     * 取值：活动|商品|规格|规格代码
     *
     */
    @Column(name = "STOCK_COUNT_TYPE",columnDefinition = "VARCHAR(8) COMMENT '限购的方式，值为NONE时不限购取值：OPENID|VIN|MOBILE'",length = 11)
    private String stockCountType;


    /*
     * -----------------------
     *
     *  以下字段根据类型不同，需要的字段
     *  不同。比如折扣活动，只会用到折扣
     *  相关字段。
     *
     * -----------------------
     *
     */

    // 限时折扣活动 参数  --开始
    /**
     * 折扣原价
     */
    @Column(name = "DISCOUNT_ORIGIN_PRICE",columnDefinition = "INT(10) COMMENT '折扣原价'",length = 10)
    private Integer discountOriginPrice;
    /**
     * 折扣值，具体的折扣值，采用【1-10】
     */
    @Column(name = "DISCOUNT_VALUE",columnDefinition = "INT(2) COMMENT '折扣值，具体的折扣值，采用【1-10】'",length = 2)
    private Integer discountValue;
    /**
     * 限时折扣，直接减去的价格(单位分)(或者定金)
     */
    @Column(name = "DISCOUNT_MINUS_PRICE",columnDefinition = "INT(11) COMMENT '限时折扣，直接减去的价格(单位分)'",length = 11)
    private Integer discountMinusPrice;


    // 限时折扣活动 参数  --结束
    // ----------------------


    //秒杀活动 参数 --开始


    /**
     * 秒杀时可以秒杀的总数量
     */
    @Column(name = "SECKILL_PROVIDE_COPIES",columnDefinition = "INT(11) COMMENT '秒杀时可以秒杀的总数量'",length = 40)
    private Integer seckillProvideCopies;

    /**
     * 秒杀时商品金额
     */
    @Column(name = "SECKILL_PRICE",columnDefinition = "INT(11) COMMENT '秒杀时商品金额'",length = 11)
    private Integer seckillPrice;
    //秒杀活动 参数 --结束
    // ----------------------





    //众筹活动 参数 --开始
    /**
     * 期次代码
     */
    @Column(name = "PERIOD_NUM",columnDefinition = "VARCHAR(50) COMMENT '期次代码'",length = 50)
    private String periodNum;

    /**
     * 每期——众筹目标数量
     */
    @Column(name = "CROWD_UNIT",columnDefinition = "INT(11) COMMENT '众筹份额'",length = 11)
    private Integer crowdUnit;

    /**
     * 每期——每份价格（单位分）
     */
    @Column(name = "CROW_UNIT_PRICE",columnDefinition = "INT(11) COMMENT '众筹每份价格（单位分）'",length = 11)
    private Integer crowUnitPrice;

    /**
     * 众筹期次数量——例如：总共5期
     */
    @Column(name = "CROW_GOAL_COUNT",columnDefinition = "INT(11) COMMENT '众筹目标数量'",length = 11)
    private Integer crowGoalCount;

    //众筹活动 参数 --结束
    // ----------------------

}